package com.example.entity;

import com.example.util.AppUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

/**
 * @Document注解：
 *   - indexName：索引名称，等于数据库的database
 *   - shards：主分区数量，默认 = 5
 *   - replicas：副分区数量，默认 = 1
 *   - createIndex：当索引不存在时是否自动创建索引，默认 = true
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "user_index")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    // @Id：表示索引的主键
    @Id
    private int id;
    // @Field：描述字段的ES数据类型，等于mapping的描述。
    //  - index属性：设置字段是否索引，如果为false则字段不能被查询，默认为true
    //  - store属性：被store标记的字段被存储在和index不同的fragment中，以便于快速检索，默认为false
    //  - type属性：数据类型(text、keyword、date、object、geo等，其中keyword不会分词，支持聚合，text会分词，不支持聚合)
    //  - analyzer属性：对字段使用分词器，一般需要使用分词器的字段type都为text
    @Field(type = FieldType.Keyword)
    private String name;
    // 字段type = text可以分词，ik_smart=粗粒度分词 ik_max_word 为细粒度分词
    // @Field(type = FieldType.Text, analyzer = "ik_smart")
    @Field(type = FieldType.Text)
    private String country;
    @Field(type = FieldType.Text)
    private String province;
    @Field(type = FieldType.Text)
    private String cityname;
    @Field(type = FieldType.Text)
    private String district;
    @Field(type = FieldType.Keyword)
    private String date;

    public static User getInstance(String name, String country, String province, String cityname, String district) {
        return new User(0, name, country, province, cityname, district, AppUtils.getDate());
    }

}
